using System.Collections;
using System.Collections.Generic;
using UnityEngine;


/// <summary>
/// 持有所有状态类，并对他们进行管理和切换
/// 负责当前状态的更新
/// </summary>
public class StateMachine : MonoBehaviour
{
    public IState currentState;   //当前状态
    public Dictionary<System.Type, IState> stateTable; //字典，用于保存状态以及查询状态，方便状态切换时//进行查找
    public void Update()
    {
        currentState.LogicUpdate();//执行每个状态的逻辑切换函数，可以使状态实现检测//变换，类似于Update内的函数实时接收信息
    }
    public void FixedUpdate()
    {
        currentState.PhysicalUpdate();
    }
    //切换状态
    protected virtual void SwitchOn(IState newState)
    {
        //当前状态变为新状态
        currentState = newState;
        //进入新状态
        currentState.Enter();
    }
    //
    public virtual void SwitchState(IState newState)
    {
        //退出状态
        currentState.Exit();
        //进入新状态
        SwitchOn(newState);
    }
    //切换状态函数重载
    public virtual void SwitchState(System.Type newStateType)
    {
        SwitchState(stateTable[newStateType]);//将字典内的状态传入
    }
}